#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=N<<1,K=1010;
int n,m,ans,num[N],cpy[N],in[N],f[K][K];
int g[N];
int first[N],to[M],nxt[M],cnt;
bool sub=1;
vector<int>dp[N];
inline void Max(int &x,int y) {x=x>y?x:y;}
inline void inc(int x,int y) {nxt[++cnt]=first[x],to[cnt]=y,first[x]=cnt;}
void dfs(int x,int fr)
{
    int T0=-1e9,T1=-1e9,now=0;
    for(int i=first[x],v;i;i=nxt[i])
    {
        if((v=to[i])==fr) continue;
        dfs(v,x);
        // dp[x].push_back(f[v][0]);
        for(int j=0;j<=num[x];j++)
            for(int k=0;k<=num[v];k++)
                Max(cpy[j+k],f[x][j]+(k?f[v][k]:0));
        Max(now,T1+f[v][0]+1);
        Max(now,T0+f[v][1]+1);
        Max(T0,f[v][0]),Max(T1,f[v][1]);
        num[x]+=num[v];
        for(int j=1;j<=num[x];j++) f[x][j]=cpy[j],cpy[j]=0;
        // if(x==1) cerr<<v<<" "<<f[x][1]<<endl;
    }
    // f[x][1]=1;
    for(int i=0;i<=num[x];i++) Max(cpy[i+1],f[x][i]+1);
    for(int i=1;i<=num[x];i++) Max(cpy[i-1],f[x][i]+1);
    ++num[x];
    for(int i=0;i<=num[x];i++) f[x][i]=cpy[i],cpy[i]=0;
    // dp[x].push_back(f[x][0]);
    // sort(dp[x].begin(),dp[x].end(),[](int A,int B){return A>B;});
    // int Mx=0;
    // for(int i=0;i<min(2,(int)dp[x].size());i++) Mx+=dp[x][i];
    Max(f[x][0],now);
    Max(ans,max(f[x][0],f[x][1]));
    // for(int i=0;i<=num[x];i++)
    //     cout<<x<<" "<<i<<" "<<f[x][i]<<endl;
}
void dfs2(int x,int fr)
{
    num[x]=1;
    if(fr) --in[x];
    for(int i=first[x],v;i;i=nxt[i])
        if((v=to[i])==fr)
            dfs2(v,x),g[x]+=g[v],num[x]+=num[v];
    if(!(num[x]&1)) ++g[x],++num[x];
    if(in[x]==1) --g[x],Max(g[x],0);
}
int main()
{
    freopen("bird.in","r",stdin);
    freopen("bird.out","w",stdout);
    ios::sync_with_stdio(0);
    cin>>n;
    for(int i=1,u,v;i<n;i++)
        cin>>u>>v,inc(u,v),inc(v,u),++in[u],++in[v];
    sub&=(in[1]<3);
    for(int i=2;i<=n;i++) sub&=(in[i]<4);
    // if(sub)
    // {
    //     dfs2(1,0);
    //     printf("%d\n",n-g[1]);
    // }
    // return 0;
    dfs(1,0);
    printf("%d\n",ans);
    return 0;
}